/**
 * 高德地图配置文件
 * 
 * 🔧 配置步骤：
 * 1. 访问高德开放平台: https://lbs.amap.com
 * 2. 注册/登录账号
 * 3. 进入控制台 → 应用管理 → 我的应用
 * 4. 创建新应用 (选择 Web端(JS API))
 * 5. 获取 API Key 和 安全密钥(SecurityJsCode)
 * 
 * 🔐 安全配置：
 * - API Key: 应用的唯一标识
 * - SecurityJsCode: 从2021年开始必须配置的安全密钥
 * - 域名白名单: 在控制台配置允许访问的域名
 * 
 * 📦 依赖安装：
 * npm install @amap/amap-jsapi-loader
 */

// 高德地图配置
export const MAP_CONFIG = {
  // ⚠️ 请替换为您自己的高德地图 Web API Key
  // 获取地址: https://lbs.amap.com/dev/key/app
  KEY: '81e2283011af97b83d283cbfe1180b45', // ← 请将这里替换为您的真实API Key
  
  // ⚠️ 请替换为您自己的安全密钥 (SecurityJsCode)
  // 获取地址: https://lbs.amap.com/dev/key/app (在应用管理中获取)
  SECURITY_JS_CODE: '43656b9fed7c11c8f0456012f686a027', // ← 请将这里替换为您的真实安全密钥
  
  VERSION: '2.0',
  PLUGINS: [
    'AMap.Geocoder',      // 逆地理编码
    'AMap.PlaceSearch',   // 地点搜索 
    'AMap.Geolocation',   // 定位
    'AMap.Scale',         // 比例尺
  ],
  // 调试模式
  DEBUG: process.env.NODE_ENV === 'development'
};

// 验证API Key格式
const validateApiKey = (key: string) => {
  // 高德API Key通常是32位字符串
  const keyPattern = /^[a-f0-9]{32}$/i;
  return keyPattern.test(key);
};

// 验证安全密钥格式
const validateSecurityCode = (code: string) => {
  // 安全密钥通常也是32位字符串
  const codePattern = /^[a-f0-9]{32}$/i;
  return codePattern.test(code);
};

// 设置安全密钥
export const setSecurityConfig = () => {
  // 设置安全密钥 (必须在加载地图脚本之前设置)
  window._AMapSecurityConfig = {
    securityJsCode: MAP_CONFIG.SECURITY_JS_CODE,
  };

  if (MAP_CONFIG.DEBUG) {
    console.log('🔐 高德地图安全配置已设置:', {
      hasApiKey: !!MAP_CONFIG.KEY,
      hasSecurityCode: !!MAP_CONFIG.SECURITY_JS_CODE,
      apiKeyFormat: validateApiKey(MAP_CONFIG.KEY),
      securityCodeFormat: validateSecurityCode(MAP_CONFIG.SECURITY_JS_CODE)
    });
  }
};

// 使用 AMapLoader 加载高德地图
export const loadAMap = async () => {
  try {
    // 动态导入 AMapLoader
    const AMapLoader = await import('@amap/amap-jsapi-loader');
    
    // 检查配置
    if (!MAP_CONFIG.KEY || MAP_CONFIG.KEY === '81e2283011af97b83d283cbfe1180b45') {
      console.warn('⚠️ 正在使用示例API Key，请替换为您自己的Key');
    }

    if (!MAP_CONFIG.SECURITY_JS_CODE || MAP_CONFIG.SECURITY_JS_CODE === '43656b9fed7c11c8f0456012f686a027') {
      console.warn('⚠️ 正在使用示例安全密钥，请替换为您自己的SecurityJsCode');
    }

    if (!validateApiKey(MAP_CONFIG.KEY)) {
      console.warn('⚠️ API Key格式可能不正确，请检查');
    }

    if (!validateSecurityCode(MAP_CONFIG.SECURITY_JS_CODE)) {
      console.warn('⚠️ 安全密钥格式可能不正确，请检查');
    }

    // 设置安全密钥
    setSecurityConfig();

    // 使用官方加载器加载地图
    const AMap = await AMapLoader.default.load({
      key: MAP_CONFIG.KEY,
      version: MAP_CONFIG.VERSION,
      plugins: MAP_CONFIG.PLUGINS,
    });

    if (MAP_CONFIG.DEBUG) {
      console.log('✅ 高德地图加载成功:', AMap);
    }

    return AMap;
  } catch (error) {
    console.error('❌ 高德地图加载失败:', error);
    console.error('请检查:');
    console.error('1. 是否已安装 @amap/amap-jsapi-loader');
    console.error('2. 网络连接是否正常');
    console.error('3. API Key是否有效');
    console.error('4. 安全密钥是否正确');
    console.error('5. 域名是否在白名单中');
    throw error;
  }
};

// 声明全局 AMap 类型
declare global {
  interface Window {
    AMap: any;
    _AMapSecurityConfig: {
      securityJsCode: string;
    };
  }
} 